/**
 * 在 JavaScript 中，字符串是以 UTF-16 编码储存的，而不是字节流（ ASCII 或 UTF-8）
 * 对于需要处理二进制数据的操作（比如读取文件、从网络接收数据等）
 * JavaScript 原生并没有内建的数据结构来直接处理这些原始数据。
 * Buffer 就是为了解决这个问题而诞生的，它允许在内存中操作原始的二进制数据。
 * =================================================================
 * 他的特点：
 *   1.原始二进制数据存储：Buffer 不是以字符的形式存储数据，而是直接以字节的形式存储数据。
 *   2.固定大小：一旦创建，Buffer 的大小是固定的，不能动态增大或缩小。
 *   3.直接访问内存：Buffer 提供了直接访问内存的能力，因此操作效率高。
 * =================================================================
 */

// 创建 Buufer
const buffer = Buffer.from('Hello, Buffer!'); // 创建 Buffer 并使用 UTF-8 编码

// 读取 Buffer 内容
console.log(buffer.toString()); // 输出: Hello, Buffer!

// 获取 Buffer 的长度
console.log(buffer.length); // 输出: 14

// 获取 Buffer 的某一字节
console.log(buffer[0]); // 输出: 72 (ASCII 值)

// 切片 Buffer
const subBuffer = buffer.slice(6); // 截取 Buffer 的第 7 到 13 位
console.log(subBuffer.toString()); // 输出: Buffer!

// 连接 Buffer
const concatBuffer = Buffer.concat([buffer, subBuffer]); // 连接 Buffer
console.log(concatBuffer.toString()); // 输出: Hello, Buffer! Buffer!

// 复制 Buffer
const copiedBuffer = Buffer.from(concatBuffer); // 复制 Buffer
console.log(copiedBuffer.toString()); // 输出: Hello, Buffer! Buffer!

// 写入 Buffer
copiedBuffer.write('Hello, World!'); // 覆盖 Buffer 的部分内容
console.log(copiedBuffer.toString()); // 输出: Hello, World! Buffer!

// 转换 Buffer 到 ArrayBuffer
const arrayBuffer = copiedBuffer.buffer; // 转换 Buffer 到 ArrayBuffer
console.log(arrayBuffer); // 输出: <Buffer 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 20 42 75 66 66 65 72 21>

// 转换 ArrayBuffer 到 Buffer
const arrayBufferBuffer = Buffer.from(arrayBuffer); // 转换 ArrayBuffer 到 Buffer
console.log(arrayBufferBuffer.toString()); // 输出: Hello, World! Buffer!

